home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Misc / msql-1.0.6 / src / msql / relshow.c < prev    next >
C/C++ Source or Header  |  1995-01-31  |  5KB  |  244 lines

  1. /*
  2. **    relshow.c    - Display the database structure
  3. **
  4. **
  5. ** Copyright (c) 1993  David J. Hughes
  6. **
  7. ** Permission to use, copy, and distribute for non-commercial purposes,
  8. ** is hereby granted without fee, providing that the above copyright
  9. ** notice appear in all copies and that both the copyright notice and this
  10. ** permission notice appear in supporting documentation.
  11. **
  12. ** This software is provided "as is" without any expressed or implied warranty.
  13. **
  14. ** ID = "$Id:"
  15. **
  16. */
  17.  
  18.  
  19.  
  20. #include <stdio.h>
  21. #include <sys/types.h>
  22. #include <sys/socket.h>
  23. #include <netinet/in.h>
  24. #include <arpa/inet.h>
  25. #include <signal.h>
  26. #include <netdb.h>
  27.  
  28. #include <common/portability.h>
  29. #include "msql_priv.h"
  30. #include "msql.h"
  31.  
  32.  
  33. char    PROGNAME[] = "Relshow";
  34.  
  35. void usage()
  36. {
  37.     printf("\nUsage : relshow [-h host] [dbName [relName]]\n\n");
  38.     printf("         Where   dbName is the name of a database\n");
  39.     printf("                 relname is the name of a relation\n\n");
  40.     printf("If no database is given, list the known databases\n");
  41.     printf("If no relation is given, list relations in the database\n");
  42.     printf("If database and relation given, list fields and field types\n");
  43.     printf("   in the given relation\n\n\007");
  44. }
  45.  
  46.  
  47.  
  48.  
  49. main(argc,argv)
  50.     int    argc;
  51.     char    *argv[];
  52. {
  53.     char    dbShow = 0,
  54.         relShow = 0,
  55.         fieldShow = 0;
  56.     char    typeName[10];
  57.     int    sock,
  58.         argsLeft,
  59.         errFlag = 0,
  60.         c;
  61.     m_row    cur;
  62.     m_result *res;
  63.     m_field    *curField;
  64.         char    *host = NULL;
  65.         extern  int optind;
  66.         extern  char *optarg;
  67.  
  68.  
  69.         while((c=getopt(argc,argv,"h:"))!= -1)
  70.         {
  71.                 switch(c)
  72.                 {
  73.                         case 'h':
  74.                                 if (host)
  75.                                         errFlag++;
  76.                                 else
  77.                                         host = optarg;
  78.                                 break;
  79.                         case '?':
  80.                                 errFlag++;
  81.                                 break;
  82.                 }
  83.         }
  84.  
  85.     argsLeft = argc - optind;
  86.  
  87.     /*
  88.     ** Work out what we here to do
  89.     */
  90.  
  91.     switch(argsLeft)
  92.     {
  93.         case 0:    dbShow++;
  94.             break;
  95.         case 1: relShow++;
  96.             break;
  97.         case 2:    fieldShow++;
  98.             break;
  99.         default:usage();
  100.             exit(1);
  101.     }
  102.  
  103.  
  104.     /*
  105.     **  Fire up mSQL
  106.     */
  107.  
  108.     if ((sock = msqlConnect(host)) < 0)
  109.     {
  110.         printf("\nError connecting to database : %s\n\n", msqlErrMsg);
  111.         exit(1);
  112.     }
  113.  
  114.     if (!dbShow)
  115.     {
  116.         if(msqlSelectDB(sock,argv[optind]) < 0)
  117.         {
  118.             printf("\n%s\n\n",msqlErrMsg);
  119.             msqlClose(sock);
  120.             exit(1);
  121.         }
  122.     }
  123.  
  124.  
  125.     /*
  126.     ** List the available databases if required
  127.     */
  128.  
  129.     if (dbShow)
  130.     {
  131.         res = msqlListDBs(sock);
  132.         if (!res)
  133.         {
  134.             printf("\nERROR : Couldn't get database list!\n");
  135.             exit(1);
  136.         }
  137.         printf("\n\n  +-----------------+\n");
  138.         printf("  |    Databases    |\n");
  139.         printf("  +-----------------+\n");
  140.         while((cur = msqlFetchRow(res)))
  141.         {
  142.             printf("  | %-15.15s |\n", cur[0]);
  143.         }
  144.         printf("  +-----------------+\n\n");
  145.         msqlFreeResult(res);
  146.         msqlClose(sock);
  147.         exit(0);
  148.  
  149.     }
  150.  
  151.  
  152.     /*
  153.     ** List the available relations if required
  154.     */
  155.  
  156.     if (relShow)
  157.     {
  158.  
  159.         res = msqlListTables(sock);
  160.         if (!res)
  161.         {
  162.             printf("\n");
  163.             printf("ERROR : Unable to list tables in database %s\n",
  164.                 argv[optind]);
  165.             exit(1);
  166.         }
  167.         printf("\n\nDatabase = %s\n\n",argv[optind]);
  168.         printf("  +---------------------+\n");
  169.         printf("  |       Table         |\n");
  170.         printf("  +---------------------+\n");
  171.         while((cur = msqlFetchRow(res)))
  172.         {
  173.             printf("  | %-19.19s |\n", cur[0]);
  174.         }
  175.         printf("  +---------------------+\n\n");
  176.         msqlFreeResult(res);
  177.         msqlClose(sock);
  178.         exit(0);
  179.     }
  180.  
  181.  
  182.     /*
  183.     ** List the attributes and types if required
  184.     */
  185.  
  186.     if (fieldShow)
  187.     {
  188.         /*
  189.         ** Get the list of attributes
  190.         */
  191.  
  192.         res = msqlListFields(sock,argv[optind+1]);
  193.         if (!res)
  194.         {
  195.             printf("ERROR : Couldn't find %s in %s!\n\n",
  196.                 argv[optind+1], argv[optind]);
  197.             exit(1);
  198.         }
  199.  
  200.         /*
  201.         ** Display the information
  202.         */
  203.  
  204.         printf("\nDatabase = %s\n",argv[optind]);
  205.         printf("\nTable    = %s\n\n",argv[optind + 1]);
  206.         printf(" +-----------------+----------+--------+----------+-----+\n");
  207.         printf(" |     Field       |   Type   | Length | Not Null | Key |\n");
  208.         printf(" +-----------------+----------+--------+----------+-----+\n");
  209.         while((curField = msqlFetchField(res)))
  210.         {
  211.             
  212.             printf(" | %-15.15s | ",curField->name);
  213.             switch(curField->type)
  214.             {
  215.                 case INT_TYPE:
  216.                     strcpy(typeName,"int");
  217.                     break;
  218.  
  219.                 case CHAR_TYPE:
  220.                     strcpy(typeName,"char");
  221.                     break;
  222.  
  223.                 case REAL_TYPE:
  224.                     strcpy(typeName,"real");
  225.                     break;
  226.  
  227.                 default:
  228.                     strcpy(typeName,"Unknown");
  229.                     break;
  230.             }
  231.             printf("%-8.8s |",typeName);
  232.             printf(" %-6d |",curField->length);
  233.             printf(" %-8.8s |", IS_NOT_NULL(curField->flags)?
  234.                 "Y":"N");
  235.             printf(" %-3.3s |\n", IS_PRI_KEY(curField->flags)?
  236.                 "Y":"N");
  237.         }
  238.         printf(" +-----------------+----------+--------+----------+-----+");
  239.         printf("\n\n");
  240.         msqlFreeResult(res);
  241.         msqlClose(sock);
  242.     }
  243. }
  244.